From f0cae27e3bb9f7947d4c3655a7b3666dd75a6213 Mon Sep 17 00:00:00 2001 From: robertl Date: Thu, 6 Jan 2005 16:21:16 +0000 Subject: [PATCH] Add global search and replace via gstrsub. --- defs.h | 3 ++- util.c | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/defs.h b/defs.h index e0ac7e40c..e349b5d6b 100644 --- a/defs.h +++ b/defs.h @@ -475,7 +475,8 @@ void xfputs(const char *errtxt, const char *s, FILE *stream); int case_ignore_strcmp(const char *s1, const char *s2); -char *strsub(char *s, char *search, char *replace); +char *strsub(const char *s, const char *search, const char *replace); +char *gstrsub(const char *s, const char *search, const char *replace); void rtrim(char *s); signed int get_tz_offset(void); time_t current_time(void); diff --git a/util.c b/util.c index c58520ac0..11d3e8783 100644 --- a/util.c +++ b/util.c @@ -621,7 +621,7 @@ double degrees2ddmm(double deg_val) { * Doesn't try to make an optimally sized dest buffer. */ char * -strsub(char *s, char *search, char *replace) +strsub(const char *s, const char *search, const char *replace) { char *p; int len = strlen(s); @@ -649,6 +649,21 @@ strsub(char *s, char *search, char *replace) return d; } +/* + * As strsub, but do it globally. + */ +char * +gstrsub(const char *s, const char *search, const char *replace) +{ + char *o = xstrdup(s); + + while (strstr(o, search)) { + o = strsub(o, search, replace); + } + + return o; +} + char * rot13( const char *s ) { @@ -783,6 +798,32 @@ char * str_utf8_to_cp1252( const char * str ) return result; } +#if 0 +/* + * Convert to ISO 8859-1 (LATIN-1). The result is never longer than + * the source. + */ +char * +str_utf8_to_8859_1( const char * str ) +{ + char *result = xstrdup( str ); + char *cur = result; + unsigned char c; + + while (c = *str++) { + if (c < 0x80) { + *cur++ = c; + continue; + } + if ((c & 0xFE) == 0xC2) { + *cur++ = ((c & 0x03) << 6) | (*str++ & 0x3f); + } + } + + return result; +} +#endif + char * str_utf8_to_ascii( const char * str ) { char *result; -- 2.30.2